package com.example.letgo;


import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;

import com.example.letgo.Application.App;
import com.example.letgo.Fragment.InformationFragment;
import com.example.letgo.Fragment.PersoncenterFragment;
import com.example.letgo.Fragment.StoryFragment;
import com.example.letgo.Fragment.TripFragment;
import com.example.letgo.model.TokenResponse;
import com.example.letgo.model.User;
import com.google.gson.Gson;
import com.hjm.bottomtabbar.BottomTabBar;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback;

import java.security.MessageDigest;

import io.rong.imkit.RongIM;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.UserInfo;
import okhttp3.Call;
import okhttp3.Response;

/**
 * Created by cc on 2018/2/3.
 */

@SuppressWarnings("ResourceType")
public class HomeActivity extends AppCompatActivity {
    BottomTabBar mBottomTabBar;
    User user = new User();
    TokenResponse tokenResponse = new TokenResponse();
    private String token=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        mBottomTabBar = (BottomTabBar) findViewById(R.id.bottom_tab_bar);
        mBottomTabBar.init(getSupportFragmentManager())
                .addTabItem("行程", R.drawable.buxing, TripFragment.class)
                .addTabItem("故事", R.drawable.youji, StoryFragment.class)
                .addTabItem("消息", R.drawable.xiaoxi, InformationFragment.class)
                .addTabItem("我的", R.drawable.account, PersoncenterFragment.class);
        getUserInfo(1);

    }

       /**
     * 获取用户信息，传入登陆时候的userId
     */
    private void getUserInfo(final int userId){

        OkGo.get("http://119.29.113.114:8080/gogogo/user/"+userId)
                .execute(new StringCallback() {
            @Override
            public void onSuccess(String s, Call call, Response response) {
                Log.e("user",s);
                Gson gson = new Gson();
                user = gson.fromJson(s, User.class);
                Log.e("img:", String.valueOf(user.getUserImg()));
                RongIM.getInstance().refreshUserInfoCache(new UserInfo(String.valueOf(userId),user.getUserNickName(),Uri.parse(user.getUserImg())));
                getToken(user.getUserImg(), String.valueOf(userId),user.getUserNickName());
            }
        });
    }

    /**
     * 获取IM上面的token
     * @param url
     * @param userId
     * @param name
     */
    private void getToken(String url,String userId,String name){
        Uri uri = Uri.parse(url);
        String App_Key = "cpj2xarlc1cnn"; //开发者平台分配的 App Key。
        String App_Secret = "kQOlaorgzJVdra";
        String Timestamp = String.valueOf(System.currentTimeMillis() / 1000);//时间戳，从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的秒数。
        String Nonce = String.valueOf(Math.floor(Math.random() * 1000000));//随机数，无长度限制。
        String Signature = sha1(App_Secret + Nonce + Timestamp);//数据签名。

        OkGo.post("http://api.cn.ronghub.com/user/getToken.json")
                .headers("App-Key",App_Key)
                .headers("Nonce",Nonce)
                .headers("Timestamp",Timestamp)
                .headers("Signature",Signature)
                .params("userId",userId)
                .params("name",name)
                .params("portraitUri", String.valueOf(uri))
                .execute(new StringCallback() {
                    @Override
                    public void onSuccess(String s, Call call, Response response) {
                        Gson gson = new Gson();
                        tokenResponse = gson.fromJson(s,TokenResponse.class);
//                        Toast.makeText(HomeActivity.this,tokenResponse.getToken(), Toast.LENGTH_SHORT).show();
                        Log.e(">>>>>>token",tokenResponse.getToken());
                        getTokenConnect(tokenResponse.getToken());
                    }

                    @Override
                    public void onError(Call call, Response response, Exception e) {
                        Log.e(">>>>","请求异常");
                    }
                });

    }
    //SHA1加密//http://www.rongcloud.cn/docs/server.html#通用_API_接口签名规则
    private static String sha1(String data){
        StringBuffer buf = new StringBuffer();
        try{
            MessageDigest md = MessageDigest.getInstance("SHA1");
            md.update(data.getBytes());
            byte[] bits = md.digest();
            for(int i = 0 ; i < bits.length;i++){
                int a = bits[i];
                if(a<0) a+=256;
                if(a<16) buf.append("0");
                buf.append(Integer.toHexString(a));
            }
        }catch(Exception e){

        }
        return buf.toString();
    }

    /**
     * IM连接
     * @param token
     */
    private void getTokenConnect(String token) {
        /**
         * <p>连接服务器，在整个应用程序全局，只需要调用一次，需在 {@link #init(Context)} 之后调用。</p>
         * <p>如果调用此接口遇到连接失败，SDK 会自动启动重连机制进行最多10次重连，分别是1, 2, 4, 8, 16, 32, 64, 128, 256, 512秒后。
         * 在这之后如果仍没有连接成功，还会在当检测到设备网络状态变化时再次进行重连。</p>
         *
         * @param token    从服务端获取的用户身份令牌（Token）。
         * @param callback 连接回调。
         * @return RongIM  客户端核心类的实例。
         */
        if (getApplicationInfo().packageName.equals(App.getCurProcessName(getApplicationContext()))) {
            RongIM.connect(token, new RongIMClient.ConnectCallback() {

                /**
                 * Token 错误。可以从下面两点检查 1.  Token 是否过期，如果过期您需要向 App Server 重新请求一个新的 Token
                 * 2.  token 对应的 appKey 和工程里设置的 appKey 是否一致
                 */
                @Override
                public void onTokenIncorrect() {
                    Toast.makeText(HomeActivity.this,  "<<<<<......", Toast.LENGTH_SHORT).show();
                }

                /**
                 * 连接融云成功
                 *
                 * @param userid 当前 token 对应的用户 id
                 */
                @Override
                public void onSuccess(String userid) {
//                    Toast.makeText(HomeActivity.this, userid + "<<<<<", Toast.LENGTH_SHORT).show();
//                    finish();
                }

                /**
                 * 连接融云失败
                 *
                 * @param errorCode 错误码，可到官网 查看错误码对应的注释
                 */
                @Override
                public void onError(RongIMClient.ErrorCode errorCode) {
                    Toast.makeText(HomeActivity.this, "链接失败", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }


}
